iT邦幫忙

2024 iThome 鐵人賽

DAY 22
3
DevOps

後 Grafana 時代的自我修養系列 第 22

後 Grafana 時代的第二十二天 - 探討 Prometheus AlertManager 的正確姿勢(一)

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20241006/20149562G98FtcEPyp.png

前言

現代化系統中,監控與告警系統在日益複雜的服務環境中扮演著至關重要的角色。而我們在這背景下,以 AlertManager 這個百分之九十以上與 Prometheus 結合使用的告警管理工具,作為認識告警的入門磚。我們會發現看似 Prometheus 身邊的告警服務,其實隱含著許多值得探討的細節。

同時,我們也會漸漸發現,除了告警本身一番兩瞪眼的設定,我們更多的時間會在如何與團隊達成共識並完善告警管理,才能真正發揮告警的價值。

AlertManager 介紹

https://ithelp.ithome.com.tw/upload/images/20241006/20149562IH6rNjCUSC.png

AlertManager 是一個開源的告警管理工具,主要負責處理來自監控系統(如 Prometheus)的告警訊息。它的設計目標是提供一個統一的平台來管理告警的路由、去重、分組與通知。透過集中化的管理,AlertManager 能夠在現代化的雲端服務架構中扮演關鍵角色,確保系統和服務的穩定性和可靠性。

AlertManager 提供了一系列強大的功能,這些功能有助於有效管理和處理系統中的告警:

  1. 告警去重:AlertManager 可以自動辨識重複的告警訊息,避免對相同問題進行多次通知,從而減少告警噪音並提升處理效率。
  2. 告警分組:它能夠將相似的告警匯集成一個群組,並以單一通知的形式發送,幫助管理大量的告警訊息,讓問題的關聯性更加清晰。
  3. 告警路由:AlertManager 依照事先定義的規則,將不同類型的告警傳送到不同的接收器(如 Email、Slack、PagerDuty),以確保正確的負責團隊能夠即時獲得相關告警。
  4. 告警抑制:在某些情況下,例如已知問題正在處理過程中,AlertManager 可以暫時抑制某些告警,防止重複通知對團隊的干擾。
  5. 外部整合:它支援與各種外部系統(如自動化故障修復工具)進行整合,這允許自動處理某些特定類型的告警,提升系統的自我修復能力。

應用場景

AlertManager 可以被應用在許多不同的場景中,以下是幾個典型的應用範例:

  • 雲端服務監控:在雲端環境中,AlertManager 與 Prometheus 結合,能夠監控基礎設施、應用和服務,並在出現異常時發送即時告警,確保問題能夠及時被處理。
  • 微服務架構:在微服務架構下,AlertManager 可以幫助監控和管理來自多個服務和元件的告警。透過分組與路由,告警能夠快速送達給對應的負責團隊。
  • 自動化修復:整合自動化修復工具後,AlertManager 可以實現告警的自動處理,例如自動擴展資源或重新啟動服務,提升系統的穩定性。

AlertManager 核心元件

https://ithelp.ithome.com.tw/upload/images/20241006/20149562pjqppeaNA9.png

AlertManager 是由多個核心元件組成,這些元件相互協作,確保告警系統的高效運作。以下是這些核心元件的簡要介紹:

元件 功能
接收器(Receiver) 定義告警通知的傳遞方式,支援多種通訊管道,如 Email、Slack、Webhook 等。
去重(Deduplication) 基於告警標籤與指紋,識別並合併重複的告警,避免重複通知並減少告警噪音。
分組(Grouping) 將相關告警按照指定規則(如服務名稱、環境等)進行分組,將多個相似告警打包成單一通知,提高管理效率。
路由(Routing) 根據告警特性(如嚴重程度、服務類別),將告警傳送至對應的接收器,確保最合適的人員或團隊處理該告警。
通知(Notification) 負責將處理後的告警發送出去,並可根據需求自訂通知模板,提供解決問題的建議,提升問題處理效率。
抑制(Inhibition) 在特定情境下(如已知問題處理期間),暫時抑制某些告警,避免過多的無用通知影響問題處理。

AlertManager 通知流程

https://ithelp.ithome.com.tw/upload/images/20241006/20149562gCe8QG3zzW.png

AlertManager 的通知流程清楚地展示了告警是如何被接收、處理和發送的。這個流程的設計確保了告警能夠以最有效的方式管理,並即時通知到相關人員。以下是 AlertManager 的通知流程詳解:

  1. 告警生成:告警由外部監控系統(如 Prometheus)生成,當監控的指標符合預設的告警條件時,告警會自動觸發並發送至 AlertManager。
  2. 告警接收:AlertManager 透過其 HTTP API 接收來自不同監控系統的告警,這些告警包含名稱、描述、標籤和觸發時間等詳細訊息。
  3. 告警去重:AlertManager 會根據標籤和指紋來辨識重複的告警,並進行合併,確保同一事件不會多次通知。
  4. 告警分組:相似的告警將被分組,以單一通知的形式發送,這樣能有效管理大量告警,並確保問題的關聯性被清晰傳遞。
  5. 告警路由:根據預定規則,AlertManager 會將告警路由到合適的接收器,確保告警通知能送達最適合處理的團隊。
  6. 通知發送:告警通知會根據配置發送至不同的通道,如 Email、Slack、PagerDuty 等。
  7. 告警抑制:在特定情況下,例如系統維護或已知問題處理期間,AlertManager 可以抑制某些告警,減少不必要的通知干擾。
  8. 日誌記錄:AlertManager 會詳細記錄每個告警的處理過程,包括接收、去重、分組、路由和通知發送等,這些日誌為日後的審計和問題排查提供依據。

AlertManager 與 Prometheus 的整合

https://ithelp.ithome.com.tw/upload/images/20241006/20149562bUS79u4RQ9.png

AlertManager 是 Prometheus 生態系統中的關鍵組件,負責處理和管理來自 Prometheus 的告警訊息。它的主要定位是作為一個集中化的告警管理平台,提供去重、分組、路由和通知等功能,確保告警能夠被準確且高效地處理。

定義 Prometheus 告警規則

groups:
- name: loki-alert
  rules:
  - alert: LokiRequestHigh
    expr: loki_inflight_requests{} > 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: Loki Request High
      description: The loki cluster {{ $labels.cluster }} have too many requests.

在告警規則文件中,可以將相關的規則設定定義在同一個 group 內。每個 group 可以包含多條告警規則(rule)。一條告警規則主要由以下幾個部分構成:

  • alert:告警規則的名稱。
  • expr:基於 PromQL 的表達式,用來定義告警觸發條件,判斷是否有時間序列滿足該條件。
  • for:可選參數,表示告警條件需持續達到指定時間才會觸發告警。在這段時間內,警告的狀態會顯示為 pending。
  • labels:用來附加自訂標籤,這些標籤會和告警一起傳遞,幫助分類和過濾告警。
  • annotations:附加訊息,如告警的詳細描述,這些資訊會與告警一起傳遞到 Alertmanager,用於提供更多上下文訊息。

這樣的組織方式使得告警規則更容易管理,並且每條規則可以包含關鍵的描述和分類資訊。

告警規則配置

在 Prometheus 中,告警規則是基於 PromQL 表達式來定義的,當條件滿足時,系統會自動觸發告警並傳送到 AlertManager。

https://ithelp.ithome.com.tw/upload/images/20241006/20149562lPpFPbKKOJ.png

在其中我們可以看到告警進入 firing 狀態前會先進入 pending 狀態,這是因為我們在告警規則中定義了 for: 1m,表示告警條件需持續達到 1 分鐘才會觸發告警。

https://ithelp.ithome.com.tw/upload/images/20241006/20149562hI3ocAXruE.png

接著我們可以看到告警進入 firing 狀態後,會在 AlertManager 中收到通知。

https://ithelp.ithome.com.tw/upload/images/20241006/20149562T8GO4nJWj8.png

告警發送

Prometheus 評估告警規則後,會將符合條件的告警事件傳送至 AlertManager,這是透過 Prometheus 設定檔中的 alertmanagers 參數指定 AlertManager 的位址來實現的。

https://ithelp.ithome.com.tw/upload/images/20241006/20149562A7CTLT1NHO.png

告警接收與管理

https://ithelp.ithome.com.tw/upload/images/20241006/20149562Y27OomlL0T.png

AlertManager 接收到告警後,會根據預定義的規則進行去重、分組和路由,確保告警能夠正確且有效地處理。下列為 AlertManager 預設使用 namespace 進行分組的結果。

告警抑制與靜默

AlertManager 提供了告警抑制和靜默功能,在維護或已知問題處理期間,能暫時抑制告警,避免不必要的告警風暴影響團隊運作。

https://ithelp.ithome.com.tw/upload/images/20241006/201495620J2fhvOo2Q.png

通知發送

根據告警屬性和路由規則,AlertManager 將通知發送至不同的接收器,並可以根據需要自訂通知格式,提升通知的準確性和可讀性。

https://ithelp.ithome.com.tw/upload/images/20241006/20149562FJj42GP39M.png

結語

AlertManager 是構建現代化監控與告警系統不可或缺的元件。它能有效處理大量的告警,並透過去重、分組、路由和通知的方式,確保每一個告警都能夠被準確且高效地處理。與 Prometheus 的無縫整合讓使用者能夠針對系統中的各種指標和事件,進行精確的監控和告警。

然而,接下來我們將探討 AlertManager 的進階應用,不只包含告警管理本身,更涵蓋了廣泛的實務知識,包括告警的設定、最佳實踐、與其他系統的整合等,以期讓我們能夠更加掌握告警管理的各個面向。


References:


上一篇
後 Grafana 時代的第二十一天 - 探討告警事件中心的最佳實踐
下一篇
後 Grafana 時代的第二十三天 - 探討 Prometheus AlertManager 的正確姿勢(二)
系列文
後 Grafana 時代的自我修養31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言